RNN 的網路結構,讓它得以捕捉序列之間的相依關係,而語言模型經常仰賴序列間的相依關係,來訓練最佳的模型。那麼,倒底什麼是語言模型呢?
一個語言模型會以一個單字序列為輸入,輸出一個機率值,這個機率值是衡量此輸入是否符合該訓練模型的語言結構。舉例而言,我們訓練了一個英文文法的語言模型,給定兩個輸入,那麼符合英文文法的輸入就會輸出一個較高的機率值。如:“The apple and pair salad” 這個輸入不具有英文語義上的意義,自然在英文語言模型有較小,或近似於零的機率值。
在今日,因為語言資料透過網路而可輕易取得,訓練一個語言模型,多仰賴所謂的統計模型方法。也就是,蒐集一個擁有巨大訓練句子的訓練語言集,使用統計學習演算法,從這個巨大的訓練語言集中找尋單詞的出現機率和單詞間共同出現的機率來建立語言模型。這個巨大的語言訓練資料集,在自然語言處理上有其專屬的名稱,被稱為 Corpus(複數為 Corpora)。
通常,從網路爬蟲抓下來的文件,都還需經過前處理,才能作為語言模型的輸入。前處理包括了tokenization 和 word normalization 。有時,針對過長的句子,還需做 sentence segmentation,好讓語言模型能夠處理。
Tokenization 的作用在於將整個句子以字詞的單位切開,而從一個字串成為一個具有不同長度的一維的字詞序列。通常在這個階段,我們會稱呼切割下來的字詞為 token,而非 word。因為如何程式設計一個 Tokenizer,用以切割句子,也是一門學問。在切割單詞時,有時需要考慮標點符號,是否需要當成一個 token。
Word normalization 包含了將取代數字,或人名這些在統計上因為計數少,在語言中有可取代為別的獨特稀少值,所以通常可以遺棄或以特別的 token 來表示。其他常做的 word normalization 包含了將單詞中的 word stem 取出,並取代原單詞。Word stem 是字詞中不隨主詞變化的部分,這在歐語系的語言中常見。
通常在進行前處理時,會以一個現有的字彙集(vocabulary),或同時進行建立這個訓練集的字彙集。這個字彙集是 token 對索引的對映。當在做前處理時,可以依據 word normalization 的規則,而將未曾收錄於字彙集內的 token,或前所述的特殊名詞,標為特別的 token,如 <UNK>,意思為未知的 token。
標為<UNK>單詞,有兩個功用:一是將稀少的 token 其真正內容並不影響文義,集合成一個單類,而增加統計上的識別度。
另外一個功用,則是做 Out Of Vocabulary 通常又簡稱為 OOV 的標示,譯為不在字典中。但,通常 OOV 的處理還包括了丟棄不在字典中的詞,這類的 token 通常是所謂的 stop words,或經常出現的單詞。因為這些單詞太過高頻率的出現,以致於他們所帶有的 information content 非常的低,簡言之,就是任何句子都可以見到他們,任何其他單詞都能和這些單詞共同出現。這在統計學習上,也不具有辨識能力,最好的情況下是將之丟棄。
談完了訓練語言模型的資料前處理,我們要談的是現行語言模型中最簡單的模型,Bag of Words(BoW)模型。這個 BoW 的模型,是以字頻為主的語言模型。這類的字頻模型,把字詞在句子中的位置資訊捨棄,而以字頻的方式來建立關於字詞的向量表示,或稱為 word embedding。因為不儲存字詞間的順序變化,大幅簡化了計算時所需的記憶體,而被廣泛使用為基準模型。這個語言模型雖然簡單,但是對於 spam filter 類似的應用相當有用。
而什麼是 Word embedding? Word embedding 是字詞在特徵空間中的向量表示,在往後的文章會對 word embedding 的特性做詳細介紹。
而如何從離散的字詞映對到連續的向量空間中,則有不同的做法。其中一種 word embedding 的映射函式,就是以 BoW 的語言模型訓練而成,而一般的步驟如下:
GloVe 是 Global vectors for word representation 的簡稱,主要計算 target word 和 context word 共同出現的頻率,並利用下圖所列的損失函式,並用 least square 方法來求得最佳的 embedding 矩陣。